home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / misc~1 / 4 / modula2.src < prev    next >
Text File  |  1985-11-19  |  9KB  |  255 lines

  1.  
  2.         Here are definition and implementation modules for bios calls
  3.  for use with TDI's Modula-2. I found these on CompuServe. I have
  4.  almost completed a similar interface for xbios calls, that i will post
  5.  shortly.
  6.  
  7.  ----
  8.  #!/bin/sh
  9.  # This is a shell archive, meaning:
  10.  # 1. Remove everything above the #!/bin/sh line.
  11.  # 2. Save the resulting text in a file.
  12.  # 3. Execute the file with /bin/sh (not csh) to create the files:
  13.  #      bioscall.def
  14.  #      bioscall.mod
  15.  # This archive created: Mon Feb 10 03:10:05 1986
  16.  # By:  Jwahar R. Bammi ()
  17.  export PATH; PATH=/bin:$PATH
  18.  echo shar: extracting "'bioscall.def'" '(1125 characters)'
  19.  if test -f 'bioscall.def'
  20.  then
  21.         echo shar: over-writing existing file "'bioscall.def'"
  22.  fi
  23.  sed 's/^X//' << \SHAR_EOF > 'bioscall.def'
  24.  
  25.  XDEFINITION MODULE BIOScalls;
  26.  X
  27.  XFROM SYSTEM IMPORT ADDRESS , CODE , SETREG , REGISTER;
  28.  X
  29.  XEXPORT QUALIFIED getmpb, bconstat, bconin, bconout, rwabs, setexc, tickcal,
  30.  X                 getbpb, bcostat, mediach, drvmap, kbshift;
  31.  X
  32.  XPROCEDURE getmpb( pmpb : ADDRESS );  (* BIOS call #0 *)
  33.  X
  34.  XPROCEDURE bconstat ( dev : CARDINAL ) : LONGINT;  (* BIOS call #1 *)
  35.  X
  36.  XPROCEDURE bconin( dev : CARDINAL ) : LONGINT;  (* BIOS call #2 *)
  37.  X
  38.  XPROCEDURE bconout( dev : CARDINAL; ByteOut : CARDINAL );  (* BIOS call #3 *)
  39.  X
  40.  XPROCEDURE rwabs( buff : ADDRESS ; rwflag, count, recno, dev : CARDINAL )
  41.  X: LONGINT;  (* BIOS call #4 *)
  42.  X
  43.  XPROCEDURE setexc( vecnum : CARDINAL; vec : ADDRESS): ADDRESS;
  44.  X                                                          (* BIOS call #5 *)
  45.  XPROCEDURE tickcal(): LONGINT;  (* BIOS call #6 *)
  46.  X
  47.  XPROCEDURE getbpb( dev : CARDINAL ): ADDRESS;  (* BIOS call #7 *)
  48.  X
  49.  XPROCEDURE bcostat( dev : CARDINAL ): LONGINT;  (* BIOS call #8 *)
  50.  X
  51.  XPROCEDURE mediach( dev :CARDINAL ): LONGINT;  (* BIOS call #9 *)
  52.  X
  53.  XPROCEDURE drvmap(): LONGCARD;  (* BIOS call #10 *)
  54.  X
  55.  XPROCEDURE kbshift( mode : LONGINT ) : LONGINT;  (* BIOS call *11 *)
  56.  X
  57.  XEND BIOScalls.
  58.  SHAR_EOF
  59.  if test 1125 -ne "`wc -c 'bioscall.def'`"
  60.  then
  61.         echo shar: error transmitting "'bioscall.def'" '(should have been 1125
  62. -characters)'
  63.  fi
  64.  echo shar: extracting "'bioscall.mod'" '(6054 characters)'
  65.  if test -f 'bioscall.mod'
  66.  then
  67.         echo shar: over-writing existing file "'bioscall.mod'"
  68.  fi
  69.  sed 's/^X//' << \SHAR_EOF > 'bioscall.mod'
  70.  XIMPLEMENTATION MODULE BIOScalls;
  71.  X
  72.  XFROM SYSTEM IMPORT ADDRESS , CODE , SETREG , REGISTER;
  73.  X
  74.  X
  75.  XPROCEDURE getmpb( pmpb : ADDRESS );  (* BIOS call #0 *)
  76.  X
  77.  XBEGIN;
  78.  X
  79.  X  SETREG(7,pmpb);                (* put table address into register D7 *)
  80.  X  CODE( 2F07H );                 (* push longword D7 onto stack *)
  81.  X  CODE(3F3CH,0,4E4DH);   (* push call number onto stack and call TRAP #13 *)
  82.  X
  83.  XEND getmpb;
  84.  X
  85.  X
  86.  XPROCEDURE bconstat ( dev : CARDINAL ) : LONGINT;  (* BIOS call #1 *)
  87.  X
  88.  XBEGIN;
  89.  X
  90.  X  CODE( 7000H );                 (* clear D0 register *)
  91.  X  SETREG(7,ADDRESS(dev));        (* put device number into register D7 *)
  92.  X  CODE( 3F07H );                 (* push word D7 onto stack *)
  93.  X  CODE(3F3CH,1,4E4DH);   (* push call number onto stack and call TRAP #13 *)
  94.  X  RETURN LONGINT(REGISTER(0));   (* return status of character device *)
  95.  X
  96.  XEND bconstat;
  97.  X
  98.  X
  99.  XPROCEDURE bconin( dev : CARDINAL ) : LONGINT;  (* BIOS call #2 *)
  100.  X
  101.  XBEGIN;
  102.  X
  103.  X  CODE ( 7000H );                (* clear D0 register *)
  104.  X  SETREG(7,ADDRESS(dev));        (* put device number into register D7 *)
  105.  X  CODE( 3F07H );                 (* push word D7 onto stack *)
  106.  X  CODE(3F3CH,2,4E4DH);   (* push call number onto stack and call TRAP #13 *)
  107.  X  RETURN LONGINT(REGISTER(0));   (* return input character longword *)
  108.  X
  109.  XEND bconin;
  110.  X
  111.  X
  112.  XPROCEDURE bconout( dev : CARDINAL; ByteOut : CARDINAL );  (* BIOS call #3 *)
  113.  X
  114.  XBEGIN;
  115.  X
  116.  X  SETREG(7,ADDRESS(ByteOut));    (* put character into register D7 *)
  117.  X  CODE( 3F07H );                 (* push word D7 onto stack *)
  118.  X  SETREG(7,ADDRESS(dev));        (* put device number into register D7 *)
  119.  X  CODE( 3F07H );                 (* push word D7 onto stack *)
  120.  X  CODE(3F3CH,3,4E4DH);   (* push call number onto stack and call TRAP #13 *)
  121.  X
  122.  XEND bconout;
  123.  X
  124.  X
  125.  XPROCEDURE rwabs( buff : ADDRESS ; rwflag, count, recno, dev : CARDINAL )
  126.  X: LONGINT;  (* BIOS call #4 *)
  127.  X
  128.  XBEGIN;
  129.  X
  130.  X  CODE ( 7000H );              (* clear D0 register *)
  131.  X  SETREG(7,ADDRESS(dev));      (* put mass storage device number into *)
  132.  X                                   (* register D7 *)
  133.  X  CODE( 3F07H );               (* push word D7 onto stack *)
  134.  X  SETREG(7,ADDRESS(recno));    (* put starting logical sector number into *)
  135.  X                                    (* register D7 *)
  136.  X  CODE( 3F07H );               (* push word D7 onto stack *)
  137.  X  SETREG(7,ADDRESS(count));    (* put sector count into register D7 *)
  138.  X  CODE( 3F07H );               (* push word D7 onto stack *)
  139.  X  SETREG(7,buff);              (* put buffer address into register D7 *)
  140.  X  CODE( 2F07H );               (* push longword D7 onto stack *)
  141.  X  SETREG(7,ADDRESS(rwflag));   (* put read/write flag into register D7 *)
  142.  X  CODE( 3F07H );               (* push word D7 onto stack *)
  143.  X  CODE(3F3CH,4,4E4DH);   (* push call number onto stack and call TRAP #13 *)
  144.  X  RETURN LONGINT(REGISTER(0)); (* return mass storage device error *)
  145.  X                                  (* status word *)
  146.  XEND rwabs;
  147.  X
  148.  X
  149.  XPROCEDURE setexc( vecnum : CARDINAL; vec : ADDRESS): ADDRESS;
  150.  X                                                          (* BIOS call #5 *)
  151.  XBEGIN;
  152.  X
  153.  X  CODE ( 7000H );                (* clear D0 register *)
  154.  X  SETREG(7,vec);                 (* put vector address into register D7 *)
  155.  X  CODE ( 2F07H );                (* push longword D7 onto stack *)
  156.  X  SETREG(7,ADDRESS(vecnum));     (* put vector number into register D7 *)
  157.  X  CODE( 3F07H );                 (* push word D7 onto stack *)
  158.  X  CODE(3F3CH,5,4E4DH);   (* push call number onto stack and call TRAP #13 *)
  159.  X  RETURN REGISTER(0);            (* return old vector address *)
  160.  X
  161.  XEND setexc;
  162.  X
  163.  X
  164.  XPROCEDURE tickcal(): LONGINT;  (* BIOS call #6 *)
  165.  X
  166.  XBEGIN;
  167.  X
  168.  X  CODE ( 7000H );                (* clear D0 register *)
  169.  X  CODE(3F3CH,6,4E4DH);   (* push call number onto stack and call TRAP #13 *)
  170.  X  RETURN LONGINT(REGISTER(0));   (* return system clock in milliseconds *)
  171.  X
  172.  XEND tickcal;
  173.  X
  174.  X
  175.  XPROCEDURE getbpb( dev : CARDINAL ): ADDRESS;  (* BIOS call #7 *)
  176.  X
  177.  XBEGIN;
  178.  X
  179.  X  CODE ( 7000H );                (* clear D0 register *)
  180.  X  SETREG(7,ADDRESS(dev));        (* put mass storage device number into *)
  181.  X                                    (* register D7 *)
  182.  X  CODE( 3F07H );                 (* push word D7 onto stack *)
  183.  X  CODE(3F3CH,7,4E4DH);   (* push call number onto stack and call TRAP #13 *)
  184.  X  RETURN REGISTER(0);            (* return BIOS parameter block pointer *)
  185.  X
  186.  XEND getbpb;
  187.  X
  188.  X
  189.  XPROCEDURE bcostat( dev : CARDINAL ): LONGINT;  (* BIOS call #8 *)
  190.  X
  191.  XBEGIN;
  192.  X
  193.  X  CODE ( 7000H );                (* clear D0 register *)
  194.  X  SETREG(7,ADDRESS(dev));        (* put device number into register D7 *)
  195.  X  CODE( 3F07H );                 (* push word D7 onto stack *)
  196.  X  CODE(3F3CH,8,4E4DH);   (* push call number onto stack and call TRAP #13 *)
  197.  X  RETURN LONGINT(REGISTER(0));   (* return device output status word *)
  198.  X
  199.  XEND bcostat;
  200.  X
  201.  X
  202.  XPROCEDURE mediach( dev :CARDINAL ): LONGINT;  (* BIOS call #9 *)
  203.  X
  204.  XBEGIN;
  205.  X
  206.  X  CODE ( 7000H );                (* clear D0 register *)
  207.  X  SETREG(7,ADDRESS(dev));        (* put mass storage device number into *)
  208.  X                                    (* register D7 *)
  209.  X  CODE( 3F07H );                 (* push word D7 onto stack *)
  210.  X  CODE(3F3CH,9,4E4DH);   (* push call number onto stack and call TRAP #13 *)
  211.  X  RETURN LONGINT(REGISTER(0));   (* return mass storage device media *)
  212.  X                                    (* status word *)
  213.  XEND mediach;
  214.  X
  215.  X
  216.  XPROCEDURE drvmap(): LONGCARD;  (* BIOS call #10 *)
  217.  X
  218.  XBEGIN;
  219.  X
  220.  X  CODE ( 7000H );                (* clear D0 register *)
  221.  X  CODE(3F3CH,10,4E4DH);  (* push call number onto stack and call TRAP #13 *)
  222.  X  RETURN LONGCARD(REGISTER(0));  (* returns longword that maps active *)
  223.  X                                    (* storage units available *)
  224.  XEND drvmap;
  225.  X
  226.  X
  227.  XPROCEDURE kbshift( mode : LONGINT ) : LONGINT;  (* BIOS call *11 *)
  228.  X
  229.  XBEGIN;
  230.  X
  231.  X  CODE ( 7000H );                (* clear D0 register *)
  232.  X  SETREG(7,ADDRESS(mode));       (* put mode into register D7 *)
  233.  X  CODE( 2F07H );                 (* push longword D7 onto stack *)
  234.  X  CODE(3F3CH,11,4E4DH);  (* push call number onto stack and call TRAP #13 *)
  235.  X  RETURN LONGINT(REGISTER(0));   (* return shift key status word *)
  236.  X
  237.  XEND kbshift;
  238.  X
  239.  X
  240.  XEND BIOScalls.
  241.  SHAR_EOF
  242.  if test 6054 -ne "`wc -c 'bioscall.mod'`"
  243.  then
  244.         echo shar: error transmitting "'bioscall.mod'" '(should have been 6054
  245. -characters)'
  246.  fi
  247.  #      End of shell archive
  248.  exit 0
  249.  --
  250.                                         Jwahar R. Bammi
  251.                                      CompuServe:  71515,155
  252.                                Brought to you by the Club Network
  253.                                    The Club    (517) 372-3131
  254.                                    The Club II (313) 334-8877
  255.